Repository navigation
feat(revise): verifiable evidence: quote and spot checks, one verdict per line, who ran a review - #122
Merged
Conversation
… per line, who ran a review Every said: quote in the report is found in the comment it cites by scripts/quote_check.py before the report is offered; ten extracted items are spot-checked against their comments, the error rate in the Head; a probe or analyst line holding a second verdict fails its block; each finding records the login that posted it (record contract 15); page summaries carry a verbatim excerpt; every figure is a script's. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…, own-verdict reasons, page excerpts for new entries Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…quotes, prose verdict words, rates with their counts Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…reads refused, labelled second verdicts Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #88
Origin: #88, tracked in #89. In the reference revision, much of the report's evidence reached the group unchecked:
Sandbox: Sonnet,
--check, against the sandbox'swidgetsrepository with synthetic data.revise-prepare-evidence: 7 of 7 runs pass across three commits, 2 of 2 on the final one. Each run flagged the planted wrong item (slice-1#3) and put thespot check: 5 items · 1 wrong · error rate 20%line in the Head. Each also hadquote_check.pyrefuse the altered quote, recopied the comment's words, and reran the check to a pass.source-reader-page-excerpt: 2 of 2 runs return verbatimExcerpt:lines and say the version is not in the file. The first batch was marked as failing because the scenario's regex was double-escaped; the saved outputs pass the corrected regex.Canary: the next
/lasp-dev:revise prepare.spot check:line, and.review/revision/spot-check.mdshould hold ten lines.quote_check.pyshould run before the commit question, and pass.reviewer:on every finding.The failures to look for:
said:line whose words aren't in the comment it cites;What changes
Every kind of evidence the revision report rests on is now checked by a script, or by a reader who didn't produce it:
scripts/quote_check.pyfinds everysaid:line in the report, drafted entries included, in the own words of the comment it cites (or the pasted note), 1–40 words, never cutting a word.preparestep 10 runs it before offering the commit, and the report isn't offered until it passes.block_tally.pyrefuses a probe line with a second verdict, such asbreaks · … · judged as follows, and an analyst ask line with a second· outcome:or· diff:. The probe is rerun, never counted. The line forms stay as they are (see Decisions).by: review) finding carriesreviewer: <login>, the account that posted it, which is the one the attribution line names.scripts/spot_check.py samplepicks ten extracted items at random, the same ten for the same window. The driver reads each against its comment and writes.review/revision/spot-check.md. Thentallyprintsspot check: <n> items · <n> wrong · error rate <n>%for the Head.source-reader'spageblock adds one or two verbatimExcerpt:lines. The context refresh andonboard's first rules cite the page's ID, version and excerpt; a summary no excerpt bears out goes to Questions.preparestep 10: every count and time in the report is one a script printed in this run, copied as printed. A rate is written with its counts, as<n> of <n> (<pct>%). A figure no script prints is left out. The one exception is the list of files a proposal would change. The Head'scost:line now comes from the newscripts/window_cost.py, which reads the harvest's thread dumps: the median and longest open-to-merge time, and how many pull requests merged without a build.Files:
scripts/quote_check.py, new;scripts/spot_check.py, new;scripts/window_cost.py, new;scripts/block_tally.py;scripts/record.py.skills/revise/prepare.md(steps 1, 2 and 10);outline.md(the Head line; every quote is asaid:line);context-refresh.md;SKILL.md;skills/onboard/first-rules.md;agents/source-reader.md;agents/diff-probe.md.docs/contracts.md: the record v15, analysis blocks v2 and sweep blocks v3, plus three new sections: "The report's quotes", "The spot check" and "The window's cost";docs/design.md;.review/table.tests/test_quote_check.py,tests/test_spot_check.pyandtests/test_window_cost.py, new;test_block_tally.py,test_record.pyandtest_sandbox.py;pr-0042/expected.yaml, regenerated (contract line andreviewer:lines only).revise-prepare-evidenceandsource-reader-page-excerpt, and the fixturesandbox/fixture/evidence/, with synthetic comments only.revise2.25.0 andonboard0.6.7.Not changed: the guidance items and
guidance_check.py, which already checked quotes and schema;pr-review, whose attribution line already names who posted;ratchet_counts.py;capture.py.Review
Three rounds, each by a fresh adversarial reviewer:
window_cost.py.- said:line was skipped instead of checked. Such a line is now refused.window_cost.pyrefused a pull request that had no record. It now readsbody.md.breaks:orbreaks —, is caught.Checks on the final commit: the unit suite (1,255 tests), the four shell tests,
check_static.pyand codespell all pass.Decisions for the maintainer
revieweris read from the finding's poster rather than parsed from the attribution line, because the two are the same account. Records of earlier versions have none, and nothing reads the field yet.said:lines are checked. The outline now says every quote in the report is asaid:line, so a person's words given any other way count as paraphrase. Proposals that rest only on agree rates (Dial rewordings, expiries) carry no quote and aren't required to.🤖 Generated with Claude Code. AI assistance level: 5/5 (not read by a person).